package es.ikex.dao;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import es.ikex.modelo.Factura;
import es.ikex.modelo.Producto;

public class LineaPedidosDao extends ConexionDAO {

	public void introducirPedidos(int numeroPedido, String productos) {

		try {
			getConexion();
			String[] producto = productos.split(";");
			float precio = 0;
			String codigo;
			int cantidad = 0;
			boolean error = false;
			for (int i = 0; i < producto.length; i++) {
				error = false;
				codigo = producto[i].substring(0, producto[i].indexOf(':'));
				try {
					cantidad = Integer.parseInt(producto[i].substring(producto[i].indexOf(":") + 1,producto[i].length()));
				} catch (NumberFormatException e) {
					error = true;
				}
				if (!error) {

					estamento = conexion.createStatement();
					resultado = estamento
							.executeQuery("select precio from productos where Codigo='"
									+ codigo + "'");

					while (resultado.next()) {
						precio = resultado.getFloat("precio");
					}

					preparada = conexion
							.prepareStatement("insert into lineaspedidos "
									+ "(NumeroPedido, NumeroLinea, CodigoProducto, Cantidad, PrecioUnitario) values "
									+ "(?,?,?,?,?)");

					preparada.setInt(1, numeroPedido);
					preparada.setInt(2, i + 1);
					preparada.setString(3, codigo);
					preparada.setInt(4, cantidad);
					preparada.setFloat(5, precio);

					preparada.executeUpdate();

					ProductosDAO pdao = new ProductosDAO();

					pdao.menosStock(codigo, cantidad);
				}

			}

		} catch (SQLException ex) {
			ex.printStackTrace();
		} finally {
			cerrar();
		}
	}

	public void eliminarPedido(String codigo) {
		try {
			getConexion();
			preparada = conexion
					.prepareStatement("DELETE FROM lineaspedidos WHERE NumeroPedido = '"
							+ codigo + "'");
			preparada.executeUpdate();
		} catch (SQLException ex) {
			ex.printStackTrace();
		} finally {
			cerrar();
		}
	}

	public Collection<Producto> masVendidos(int numero) {

		String consulta = "SELECT CodigoProducto, count(CodigoProducto) AS total FROM lineaspedidos GROUP BY CodigoProducto ORDER BY total desc limit " + numero;
		Collection<Producto> producto = new ArrayList<Producto>();
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery(consulta );
			String where = " where ";
			while (resultado.next()) {
				where = where +" codigo='"+resultado.getString("CodigoProducto") + "' or";
			}
			where = where.substring(0, where.length() - 3);
			ProductosDAO productos = new ProductosDAO();
			producto = productos.getProductos(where);

		} catch (SQLException ex) {
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return producto;
	}
	
	public ArrayList<Factura> getPedido(String codigo) {

		String consulta = "SELECT NumeroPedido, cantidad, PrecioUnitario, Concepto, NumeroLinea FROM lineaspedidos inner join productos " +
				" on codigo=CodigoProducto where NumeroPedido='" + codigo + "'";
		ArrayList<Factura> factura = new ArrayList<Factura>();
		try {
			getConexion();
			estamento = conexion.createStatement();
			resultado = estamento.executeQuery(consulta);
			while (resultado.next()) {
				Factura f = new Factura();
				f.setCatindad(resultado.getInt("Cantidad"));
				f.setConcepto(resultado.getString("Concepto"));
				f.setNumeroLinea(resultado.getInt("NumeroLinea"));
				f.setNumeroPedido(resultado.getInt("NumeroPedido"));
				f.setPrecioUnitario(resultado.getFloat("PrecioUnitario"));
				factura.add(f);
				
			}

		} catch (SQLException ex) {
			ex.printStackTrace();
		} finally {
			cerrar();
		}
		return factura;
	}
}
